textbuffer: Don't try to inset NULL text from clipboard
authorTimm Bäder <mail@baedert.org>
Sat, 19 Sep 2020 16:41:10 +0000 (18:41 +0200)
committerTimm Bäder <mail@baedert.org>
Thu, 24 Sep 2020 17:08:22 +0000 (19:08 +0200)
That used to generate a critical error message.

Also free() the data.

gtk/gtktextbuffer.c

index 854799d8a8b20cad0d73d5c3136a21b35d9bc537..18861d301c64f8a6f050a8f73c55ff0de3468727 100644 (file)
@@ -310,6 +310,7 @@ gtk_text_buffer_deserialize_text_plain_finish (GObject      *source,
   GtkTextIter start, end;
   GError *error = NULL;
   gssize written;
+  char *data;
 
   written = g_output_stream_splice_finish (stream, result, &error);
   if (written < 0)
@@ -318,15 +319,19 @@ gtk_text_buffer_deserialize_text_plain_finish (GObject      *source,
       return;
     }
 
-  buffer = g_value_get_object (gdk_content_deserializer_get_value (deserializer));
-  gtk_text_buffer_get_end_iter (buffer, &end);
-  gtk_text_buffer_insert (buffer, 
-                          &end,
-                          g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (
-                               g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (stream)))),
-                          -1);
-  gtk_text_buffer_get_bounds (buffer, &start, &end);
-  gtk_text_buffer_select_range (buffer, &start, &end);
+  data = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (
+                               g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (stream))));
+
+  if (data)
+    {
+      buffer = g_value_get_object (gdk_content_deserializer_get_value (deserializer));
+      gtk_text_buffer_get_end_iter (buffer, &end);
+      gtk_text_buffer_insert (buffer, &end, data, -1);
+      gtk_text_buffer_get_bounds (buffer, &start, &end);
+      gtk_text_buffer_select_range (buffer, &start, &end);
+
+      g_free (data);
+    }
 
   gdk_content_deserializer_return_success (deserializer);
 }